package com.qf.controller;

import com.qf.feign.SearchFeign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.net.URI;

/**
 * 客户微服务
 *
 * @author lixu
 */
@RestController
@RequestMapping("/customer")
public class CustomerController {

    //搜索微服务的名称
    public static final String SEARCHNAME = "QF-SEARCH";

    //1: Apache HttpClient 模拟浏览器
    //2: SpringCloud  restTemplate 模拟浏览器   redisTemplate rabbitTemplate jdbcTemplate elaticSearchTemplate
    //SpringIOC容器
    @Autowired
    private RestTemplate restTemplate;
    /**
     * 负载 平衡器
     * LoadBalancerClient ：
     * Ribbon：负载均衡
     * <p>
     * // 1： 传递搜索微服务的名称 获取大量的微服务地址
     * // 2:  从大量的微服务地址中使用轮询策略找出一个地址进行返回
     */
    @Autowired
    private LoadBalancerClient loadBalancerClient;

    /**
     * 远程调用 测试
     */
    @GetMapping("/get")
    public String get() {
        //远程调用
        // 1： 传递搜索微服务的名称 获取大量的微服务地址
        ServiceInstance serviceInstance = loadBalancerClient.choose(SEARCHNAME);
        //serviceInstance.getHost()   localhost
        //serviceInstance.getPort()   9002
        //uri http://localhost:9002
        URI uri = serviceInstance.getUri();
        //url: http://localhost:9002/search/find  完整
        String url = uri + "/search/find";
        //Java代码方式 发出Http请求 获取我们想要的数据
        //参数1： url\
        String name = "小张";
        Integer age = 24;
        //2:远程调用
        String result = restTemplate.getForObject(url, String.class,name,age);

        return "我是客户微服务：我要远程调用:" + result;
    }


    @Autowired
    private SearchFeign searchFeign;//Service

    @GetMapping("/feign")
    public String feign(){
        String result = searchFeign.find();
        return "我是客户微服务，我使用Feign:" + result;

    }
}
